/*
 * @Author: C.
 * @Date: 2023-03-27 10:20:12
 */
import type { Ref } from 'vue';
import type { BasicTableProps, TableActionType } from '../types/table';
import { FormActionType } from '../../../Form/src/types/form';
import { provide, inject, ComputedRef } from 'vue';

const key = Symbol('basic-table');

type Instance = TableActionType &
  FormActionType & {
    wrapRef: Ref<Nullable<HTMLElement>>;
    getBindValues: ComputedRef<Recordable>;
  };

export type RetInstance = Omit<Instance, 'getBindValues'> & {
  getBindValues: ComputedRef<BasicTableProps>;
};

export function createTableContext(instance: Instance) {
  provide(key, instance);
}

export function useTableContext(): RetInstance {
  return inject(key) as RetInstance;
}
